package com.sunfeng.springcloud.provider.impl;

import com.sunfeng.springcloud.provider.IMessageProvider;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.MessageChannel;

import javax.annotation.Resource;
import java.util.UUID;

/**
 * @author sunfeng
 *
 *          Application Core
 *              |       |
 *          @inputs(Sink)   @outputs（Source）    @inputs  注解标识输入通道，通过该输入通道接受到的消息进入应用程序
 *                               @output  注解标识输出通道，发布的消息通过该通道离开应用程序
 *              Binder          Binder是应用与消息中间件的封装，Binder 可以很方便的链接中间件，可以动态的改变消息的类型（应对与于Kafka的topic  RabbitMQ的exechange）
 *             Middleware       中间件，目前只有支持RabbitMQ和Kafka
 *
 *          @StreamListener   监听队列，用于消费者的队列消息接受
 *          @EnableBinding    指信道channel和exchange绑定在一起
 *
 * @date 2021/04/07 11:32
 **/
@EnableBinding(Source.class)    //定义消息的推送管道
public class MessageProviderImpl implements IMessageProvider {
    @Resource
    private MessageChannel output; // 消息发送管道

    @Override
    public String send()
    {
        String serial = UUID.randomUUID().toString();
        output.send(MessageBuilder.withPayload(serial).build());
        System.out.println("*****serial: "+serial);
        return null;
    }

}
